package com.alisiwei.core.base;

import java.util.List;
import org.hibernate.transform.ResultTransformer;
/**
 * @类名 IBaseDao
 * @描述 hibernate通用dao接口 封装了大部分的dao操作
 */
public interface IBaseDao<T> {

	/**
	 * @方法名 save 
	 * @描述 保存一个对象
	 * @param t void
	 */
	public void save(T t);
	
	/**
	 * 描述：批量保存
	 * 作者：zhangkai
	 * @param list
	 */
	public void saveList(List<T> list);

	/**
	 * @方法名 delete 
	 * @描述 删除一个对象
	 * @param t void
	 */
	public void delete(T t);

	/**
	 * @方法名 update 
	 * @描述 更新一个对象
	 * @param t void
	 */
	public void update(T t);

	/**
	 * @方法名 queryForObject 
	 * @描述 根据hql和参数数组查询对象
	 * @param hql
	 * @param params
	 * @return T
	 */
	public T queryForObject(String hql, Object[] params);
	
	/**
	 * @方法名 queryForTopObject 
	 * @描述 根据hql和参数数组查询对象
	 * @param hql
	 * @param params
	 * @return T
	 */
	public T queryForTopObject(String hql, Object[] params);
	
	/**
	 * 描述：根据hql和参数数组查询列表
	 * 作者：zhangkai
	 * @param hql
	 * @param params
	 * @return List<T>
	 */
	public List<T> queryForList(String hql, Object[] params);
	
	/**
	 * 描述：查询前recordNum记录
	 * 作者：zhangkai
	 * @param hql
	 * @param params
	 * @param recordNum
	 * @return
	 */
	public List<T> queryForList(final String hql, final Object[] params, final int recordNum);
	
	/**
	 * @方法名 deleteAll 
	 * @描述 删除所有对象 void
	 */
	public void deleteAll();

	/**
	 * hql分页查询
	 * @param hql查询字符串
	 * @param pagination 分页实体
	 * @param values  排序
	 * @return QueryResult 查询结果
	 */
	public QueryResult hqlQueryPage(final String hql,final Pagination pagination, final List<String> values);
	
	/**
	 * 描述：根据sql和参数数组查询对象
	 * 作者：zhangkai
	 * @param hql
	 * @param pagination
	 * @param values
	 * @return
	 */
	public QueryResult sqlQueryPage(final String hql,final Pagination pagination, final List<String> values);
	
	/**
	 * hql查询得到总查询数目
	 * @param hql查询字符串
	 * @return int
	 */
	public int getAllCount(final String hql);
	
	/**
	 * 描述：sql查询获取list
	 * 作者：zhangkai
	 * @param sql
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public List findBySQL(String sql);

	/**
	 * 描述：sql查询获取对象list（不受hibrnate控制）
	 * 作者：zhangkai
	 * @param sql
	 * @param criteria对象
	 * @return
	 */
	@SuppressWarnings("rawtypes")
	public List findBySQL(String sql, ResultTransformer criteria);

	/**
	 * 描述：sql查询获取元素为map的list（不受hibrnate控制）
	 * 作者：zhangkai
	 * @param sql
	 * @return
	 */
	public List<T> findMapBySQL(String sql);
	
	/**
	 * 描述：获取sql语句返回的数量
	 * 作者：zhangkai
	 * @param sql
	 * @return
	 */
	public Long countSQL(String sql);
}

